#
# Ronin Exploits - A Ruby library for Ronin that provides exploitation and
# payload crafting functionality.
#
# Copyright (c) 2007-2013 Hal Brodigan (postmodern.mod3 at gmail.com)
#
# This file is part of Ronin Exploits.
#
# Ronin is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ronin is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ronin.  If not, see <http://www.gnu.org/licenses/>
#

require 'ronin/exploits/remote'
require 'ronin/model/has_default_port'
require 'ronin/network/mixins/udp'

module Ronin
  module Exploits
    #
    # An {Exploit} class that represents exploits that run against
    # remote UDP services.
    #
    class RemoteUDP < Remote

      include Model::HasDefaultPort
      include Network::Mixins::UDP

      #
      # Tests the UDP remote exploit is ready to be deployed.
      #
      def test!
        require_params :host, :port

        return super
      end

      #
      # Verifies and deploys the UDP remote exploit.
      #
      # @yield [exploit]
      #   If a block is given, it will be passed the deployed exploit.
      #
      # @yieldparam [RemoteUDP] exploit
      #   The deployed exploit.
      #
      # @return [RemoteUDP]
      #   The deployed exploit.
      #
      # @raise [ExploitNotBuilt]
      #   The exploit has not been built, and cannot be deployed.
      #
      def deploy!(&block)
        @port ||= self.default_port

        super(&block)
      end

    end
  end
end
